阅读更多

2顶
0踩

行业应用

转载新闻 趣味算法图解,文科生都看懂了

2018-04-17 11:19 by 副主编 jihong10102006 评论(4) 有77893人浏览
编者按

IDEA 是由 SándorP. Fekete、Sebastian Morr 和 Sebastian Stiller 共同推出的图解算法系列。 它们最初是为 Sándor 在德国不伦瑞克工业大学开设的算法和数据结构讲座而设计的,作者希望它们能够有更广的用途,因此在网上发布了这个项目,希望能够帮助到教师、学生和有好奇心的人们。算法将会不断更新,可以访问页面了解更多信息:https://idea-instructions.com/

这些图片使用 Inkscape 绘制,可以使用任意一款向量图编辑软件来编辑它们。每个算法下面都有相应的图片下载地址。

快速排序

快速排序是一种“分而治之”的排序算法,通过随机选择“分区点”来避免出现最坏的情况。

  • 随机选择“分区点”。
  • 按照“分区点”的高度划条线。
  • 高出“分局点”的元素需要向右移动。
  • 低于“分区点”的元素需要向左移动。
  • 移动元素。
  • 重复上述的步骤分别对位于“分区点”两边的元素进行排序
。 下载地址:https://idea-instructions.com/quick-sort/

Bogo 排序

Bogo 排序也被称为“愚蠢的排序”,是一种非常简单但低效的排序算法,就是不断打乱元素的顺序,直到达到有序为止。

  • 查看元素是否有序。
  • 元素无序,那么就打乱顺序。
  • 再次检查元素是否有序。
  • 如果有序,排序成功,否则继续重复上述步骤。
下载地址:https://idea-instructions.com/bogo-sort/

二分查找

二分查找是一种快速从一个有序数组中找到某个元素位置的查找算法。这有点类似于猜数字游戏,通过不断问“目标数字是大于还是小于某个数”这样的问题,最终猜出目标数字。

  • 限定元素区间。
  • 待查找元素在区间的某个位置吗?
  • 不在。
  • 那么看看待查找元素是不是在当前位置的左边或者右边。
下载地址:https://idea-instructions.com/binary-search/

归并排序

归并排序也是一种“分而治之”的递归排序算法。

  • 把元素分成两部分,对每一个部分采用递归的归并排序。
  • 比较已经排好序的元素。
  • 合并已经排好序的元素。
  • 排序完毕。
下载地址:https://idea-instructions.com/merge-sort/

平衡二叉树

平衡二叉树是自平衡的二叉树变种,可以保证快速的查找、插入和删除操作。


以图中的平衡二叉树为例:
  • 左子节点比父节点小,而父节点比右子节点小。如果根节点左右子树的高度差超过 1,就变得不平衡。
  • 想知道树中是否包含了元素 11?11 比 10 大,那么就查找 10 的右子节点 12。11 比 12 小,所以就查找 12 的左子节点,12 的左子节点刚好是要查找的 11。同样的,树中是否包含了元素 8?8 比 10 小,那么就查找 10 的左子节点 6。8 比 6 大,那么就查找 6 的右子节点。6 的右子节点不存在,说明树中不存在元素 8。
  • 如何找到树中最小的元素?从根节点开始,一直顺着左子节点,找到最后一个叶子节点就是树中最小的元素。
  • 如何找到 10 的下一个元素?如果根节点刚好是 10,那么就从 10 的右子树中找到最小的那个元素。如果根节点不是 10,那么先找到 10,如果 10 没有右子节点,那么就一直往父节点找,直到找到比 10 大的元素为止。
  • 在树种加入 17 或删除 10,破坏了树的平衡,这个时候需要通过旋转恢复树的平衡。
下载地址:https://idea-instructions.com/avl-tree/

图遍历

图遍历算法会遍历图中所有可达的顶点,可以通过辅助数据结构来实现各种遍历,比如使用无序集合实现随机遍历,使用堆栈实现深度优先遍历,使用队列实现广度优先遍历。

  • 随机查找:选定一个顶点,把它放入一个无序集合中。从集合中取出一个顶点,访问该顶点,把该顶点的相邻顶点放入集合中,并把该顶点移出集合。重复这一过程,直到集合中的元素全部被遍历完毕。
  • 深度优先遍历:选定一个顶点压入栈中,把该顶点其中的一个相邻顶点也压入栈中。访问栈顶的顶点,如果该顶点没有其他相邻的顶点,就出栈。如果有其他相邻顶点,就把其中的一个相邻顶点压入栈中。重复这一过程,直到栈中的元素全部被遍历完毕。
  • 广度优先遍历:选定一个顶点,把该顶点的相邻顶点放进队列尾部。访问队列头部的顶点,把该顶点移出队列,如果该顶点有相邻顶点,就把相邻顶点放进队列尾部。重复这一过程,直到队列中的元素全部遍历完毕。
下载地址:https://idea-instructions.com/graph-scan/

一笔画

一笔画是一种 Fleury 算法,旨在优雅地找出图中的欧拉(Eulerian)路径。欧拉路径是图中的一条路径,刚好经过每条边,并且每条边只被访问一次。

  • 顶点度数表示该顶点有几条边。
  • 如果图中有且仅有两个顶点的度数为奇数,其他为偶数,或者不存在奇数度数的顶点,则存在欧拉路径。
  • 选定一个顶点开始画路径。
  • 如果存在两个以上的桥,那么可以走桥。如果只剩下一个桥,就不能走桥,除非只剩下桥可以走。
  • 如果还有没有走过的边,重复步骤 4。
  • 成功画出欧拉路径。
下载地址:https://idea-instructions.com/euler-path/
原文链接:https://idea-instructions.com/
  • 大小: 85 KB
  • 大小: 68.4 KB
  • 大小: 90 KB
  • 大小: 73.9 KB
  • 大小: 113.6 KB
  • 大小: 89.9 KB
  • 大小: 121.8 KB
  • 大小: 110.2 KB
来自: InfoQ
2
0
评论 共 4 条 请登录后发表评论
4 楼 mmmzzc 2018-07-02 16:51
果然文如标题啊~
文科生能看懂,我这个写了几年代码的码农,文学素养不够,真心看不懂~
3 楼 Miaonly 2018-04-20 09:50
图很形象,容易懂
2 楼 somefuture 2018-04-19 13:12
画的太有意思了
1 楼 jy03100000 2018-04-17 20:09
我个写bug的都看不懂

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • [收藏] 趣味算法图解,文科生都看懂了

    Fekete、Sebastian Morr 和 Sebastian Stiller 共同推出的图解算法系列。 它们最初是为 Sándor 在德国不伦瑞克工业大学开设的算法和数据结构讲座而设计的,作者希望它们能够有更广的用途,因此在网上发布了这个...

  • 趣味图解编程算法,文科生都看懂了

    快速排序是一种“分而治之”的排序算法,通过随机选择“分区点”来避免出现最坏的情况。 随机选择“分区点”。 按照“分区点”的高度划条线。 高出“分局点”的元素需要向右移动。 低于“分区点”的元素...

  • 趣味算法图解,文科生都看懂了(转)

    Fekete、Sebastian Morr 和 Sebastian Stiller 共同推出的图解算法系列。 它们最初是为 Sándor 在德国不伦瑞克工业大学开设的算法和数据结构讲座而设计的,作者希望它们能够有更广的用途,因此在网上发布了这个...

  • 书单 | 本本经典,学算法就从这里选了!

    最受读者喜爱的算法书Top10TOP3TOP1TOP2算法(第4版)作者:[美]塞奇威克(Robert Sedgewick),韦恩(Kevin Wayne)译者:谢路云算法经典大部头,一本让学渣看懂且学会、不打瞌睡的好书- 算法大家 Sedgewick、Wayne...

  • 这一年,这些书:2021年读书笔记

    无极就是事物的最原始状态,同时也是事物的最崇高状态:无极生太极,太极生两仪,两仪生四象,四象生八卦,八卦演万物,万物回无极。 现在的社会,对强者越来越狠,容忍度越来越低,各种道德审判让他们每天如履薄冰...

  • 优质的计算机专业书籍有哪些?

    5.300多幅算法手绘图解,文科生都能学的懂算法通关书。 操作系统 操作系统导论 主题突出,紧紧围绕操作系统的三大主题元素——虚拟化、并发和持久性。 以对话的方式引入背景,提出问题,进而阐释原理,启发动手实践...

  • 双十二大家都在买哪些书?这份书单请码住

    双十二来啦,这一天也在提醒着我们这一年就要结束了。虽然距离上次买买买才过去不久,...不踩坑、闭着眼睛买,本本都优秀。另外,12.12 图书促销已开启。京东除部分限价图书外,其余图灵图书全场满 100-50,手慢无~

  • 插入篇 |程序员进阶之推荐书目

    所以,入门的同学,我建议你找一些比较容易看的书来看,比如《大话数据结构》和《算法图解》。不要太在意书写得深浅,重要的是能不能坚持看完。 《大话数据结构》 这本书最大的特点是,它把理论讲得很有趣,不枯燥。...

  • 计算机程序设计基础解题与实验(c语言版) 蔡启先 实验5的答案,计算机程序设计基础...

    《21世纪高等学校计算机基础实用规划教材·计算机程序设计基础教程:C语言》以实际问题的求解过程为向导,突出从问题到算法,再到程序的一种思维过程,强调计算机求解问题的思路引导与程序设计思维方式的训练,重点...

  • python人工智能入门书籍推荐-有哪些关于人工智能的书籍可供推荐?

    从零修炼成一名合格的人工智能工程师注定需要很长的路要走。而书籍正是修炼路上的武林秘籍,金庸小说中,武林人士常常会为...本文就分别介绍这四个段位中所需要的“武林秘籍”,为了方便大家,每本书后都附上了电子...

  • 为什么数学不好,和语文有关系?

    ▲点击查看苏步青教授在担任复旦大学校长时曾经说过:“如果允许复旦大学单独招生考试,我的意见是第一堂课就考语文,考后就批卷子。不合格的,以下的功课就不要考了。语文你都不行,别的是学不通的...

  • 8月书讯 | 10 本新书上市,本本精选

    本月 10本新书,本本都是精选。

  • 各领域入门书籍推荐

    你看不懂《时间简史》?!那么就看这本书吧。如果科普都能写成这样,我根本不会读小说。我记得论坛有人做过精校文字版,推荐此版本电子书。 6 、《追寻记忆的痕迹》。 书中作者追溯了维也纳的儿时经历引起他对...

  • 248ssm-mysql-jsp 校园外卖管理系统.zip(可运行源码+数据库文件+文档)

    此次设计的外卖订单管理系统的登录角色一共分为四个,消费者、商户、管理员以及骑手。设计的系统为前端网页和后台管理系统。 消费者主要有以模块的需求:(1)购物车,(2)订单中心,(3)收藏夹,(4)收货地址,(5)个人信息管理,(6)站内咨询浏览,(7)在线留言。 商户的用例包括了一下几个模块设计:(1)商品管理,(2)库存管理,(3)订单管理,(4)销量统计,(5)收藏统计(6)销售额统计,(7)订单量统计 管理员系统结构中的功能设计比较多,分为三个大类分别是基础信息、业务功能和统计信息,基础信息主要是对消费者、商户以及骑手进行信息的维护工作,维护网站内的资讯信息等。业务功能是对网站内的商家进行分类管理,对于商品以及库存进行管理,对订单进行管理以及留言管理。统计信息包括对于商品销量的统计、订单走势图的分析等。 此次使用了java web技术线进行网页端的开发,开发工具采用idea.工具,数据库采用了MySQL进行设计开发,服务器采用了Tomcat服务器技术。该网站系统能够将学校周围商家的外卖产品在网站上向用户进行展示

  • MyBatis 动态 SQL 示例

    MyBatis 是一个持久层框架,它允许用户在 XML 文件中编写动态 SQL 语句。MyBatis 的动态 SQL 功能非常强大,它允许开发者根据运行时的条件动态地生成 SQL 语句。这使得 MyBatis 能够灵活地处理各种复杂的查询需求。 MyBatis 动态 SQL 通过使用 <if>、<choose>、<when>、<otherwise>、<trim>、<set> 等标签来实现。附件中是一些常见的动态 SQL 标签及其用法,通过组合使用这些标签,可以编写出非常灵活和强大的 SQL 语句,以适应不同的查询和更新需求

  • 华为数据治理方法论,包括:数据治理框架、数据治理组织架构、数据治理度量评估体系以及华为数据治理案例分享

    华为数据治理方法论,包括:数据治理框架、数据治理组织架构、数据治理度量评估体系以及华为数据治理案例分享。 1目的 1 2面向的读者 2 3数据治理框架 3 3.1数据治理框架 3 3.2数据治理模块域 3 3.3数据治理各模块域之间的关系 4 4数据治理组织架构 7 4.1数据治理组织架构框架 7 4.2数据治理组织职责 7 5数据治理度量评估体系 10 5.1数据治理实施方法论 10 5.2数据治理度量维度 11 5.3数据治理度量评分规则 11 6华为数据治理案例 13 6.1华为数据治理思考 13 6.2华为数据治理实践 14 6.3华为数据治理效果 15 7新冠疫情数据治理思考 16 8DAYU 方法论产品落地 17

  • 毕业设计:基于SSM的mysql-羽毛球馆管理系统(源码 + 数据库 + 说明文档)

    毕业设计:基于SSM的mysql_羽毛球馆管理系统(源码 + 数据库 + 说明文档) 第二章 需求分析 3 2.1需求调研 3 2.2可行性分析 3 2.2.1技术的可行性 3 2.2.2经济的可行性 3 2.2.3操作可行性 3 2.2.4法律的可行性 4 2.3开发工具及技术 4 2.3.1网站开发环境 4 2.3.2 PHP语言简介 4 2.3.3 JavaScript技术 4 2.3.4 MySQL数据库 4 2.3.5 PHPstorm平台 5 2.3.6 工作环境 5 第三章 网站系统设计 5 3.1系统功能研究 5 3.1.1系统功能需求 5 3.2功能模块分析 6 3.3 设计的基本思想 7 3.4 性能要求 8 3.4.1 网站的安全性 8 3.4.2 数据的完整性 8 3.4.3界面要求 8 第四章 网站功能实现 8 4.1系统实现 8 4.1.1 管理员登录界面 9 4.1.2 后台用户管理 9 4.1.3 球场管理 10 4.1.4 物资管理 11 4.1.5 预定管理 12 4.2数据库的分析与设计 13 4.2.1数据库的概念结构设计 13 4.2.2数据库

  • 搜索链接相见欢友情链接系统ASPX版 v1.0-xjlinkaspxv1.0.rar

    相见欢友情链接系统ASPX版 v1.0_xjlinkaspxv1.0.rar,这是一个专为计算机专业人士设计的JSP源码资料包。这款系统是基于ASPX技术构建的,旨在为用户提供一个高效、便捷的友情链接管理平台。它能够帮助网站管理员轻松地管理和控制网站上的友情链接,提高网站的互动性和用户体验。这个资料包包含了完整的源代码和相关的文档,使得用户可以轻松地进行二次开发和定制。它提供了丰富的功能,包括友情链接的添加、删除、修改、审核等,以及链接分类、排序、搜索等功能。此外,它还支持多种链接样式和模板,可以根据用户的喜好和需求进行个性化设置。相见欢友情链接系统ASPX版 v1.0不仅功能强大,而且操作简便。它的界面设计简洁明了,用户可以快速上手,无需专业的计算机知识。同时,它还具有良好的兼容性和稳定性,可以在不同的环境和平台上运行,满足各种规模的网站建设需求。总的来说,相见欢友情链接系统ASPX版 v1.0是一个实用、高效、易用的友情链接管理工具。无论是对计算机专业人士,还是对普通用户,都是一个很好的选择。通过使用这个系统,可以大大提高网站管理的工作效率,提升网站的专业性和用户体验。重新回答||

  • node-v8.12.0-linux-armv7l.tar.gz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

Global site tag (gtag.js) - Google Analytics